﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using DataAccess;

namespace BusinessLogic
{
    public class Supervisor : Persona
    {
        #region CONSTRUCTORES

        public Supervisor() { }

        public Supervisor(long pNro, string pMail, string pNom, string pAp, string pTel, string pInt, string pSec, string pPass) 
            : base( pNro,  pMail,  pNom,  pAp,  pTel,  pInt,  pSec,  pPass)
        {}

        #endregion

        #region METODOS

        //Agregar nuevo Supervisor.
        public void addSupervisor()
        {
            ControllerSupervisor.getInstancia().insertSupervisor((Int32)this.NroFuncionario, this.Nombre, this.Apellido, this.Telefono, this.Interno, this.Mail, this.Seccion);

        }

        //Dar Supervisor por numero de funcionario.
        public static Supervisor getSupervisorByNro(long pNro)
        {
            DataTable dt = ControllerSupervisor.getInstancia().getSupervisorByNro((Int32)pNro);
            //Se parsea y devuelve al tipo Supervisor solo el primer item de la lista porque 
            //solo puede haber uno, ya que la consulta utilizada es por numnero de funcionario.
            return ((Persona.parseRegToPersona(dt)).Count() != 0) ? Supervisor.Parse((Persona.parseRegToPersona(dt))[0]) : null;

        }

        //Dar Supervisor por nombre.
        public static List<Supervisor> getSupervisorByName(string pNom, string pAp)
        {
            DataTable dt = ControllerSupervisor.getInstancia().getSupervisorByName(pNom, pAp);
            List<Persona> lstP = Persona.parseRegToPersona(dt);
            //Se castea la lista de "personas" a una de "supervisores"
            List<Supervisor> lstS = lstP.Cast<Supervisor>().ToList();
            //Se retorna la lista de supervisores con el nombre y apellido requeridos.
            return lstS;
        }

        //Dar Supervisores por estado.
        public static List<Supervisor> getSupervisoresByEstado(bool pEstado)
        {
            DataTable dt = ControllerSupervisor.getInstancia().getSupervisoresByEstado(pEstado);
            List<Persona> lstP = Persona.parseRegToPersona(dt);
            //Se castea la lista de "personas" a una de "Supervisores"
            List<Supervisor> lstS = lstP.Cast<Supervisor>().ToList();
            //Se retorna la lista de supervisores con el estado requerido.
            return lstS;
        }

        //Parsear del Tipo Persona a Supervisor.
        public static Supervisor Parse(Persona p)
        {
            Supervisor unS = new Supervisor();
            unS.NroFuncionario = p.NroFuncionario;
            unS.Nombre = p.Nombre;
            unS.Apellido = p.Apellido;
            unS.Telefono = p.Telefono;
            unS.Interno = p.Interno;
            unS.Mail = p.Mail;
            unS.Seccion = p.Seccion;
            unS.Contrasenia = p.Contrasenia;
            unS.Activo = p.Activo;

            return unS;
        }

        #endregion
    }
} 
